package org.mclll.xwangplugin.enchantment.player;

import org.bukkit.Bukkit;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.mclll.xwangplugin.enchantment.item.EnchantmentItem;
import org.mclll.xwangplugin.log.GlobalLog;
import org.mclll.xwangplugin.log.LogUtil;
import org.mclll.xwangplugin.log.LoggerFactory;

/**
 * @author 洛佑希
 */
public class PlayerLimit {
    static LogUtil log = LoggerFactory.get(GlobalLog.class);

    public static void checkAllPlayers() {
        // 清理在线玩家背包内附魔
        for (HumanEntity onlinePlayer : Bukkit.getOnlinePlayers()) {
            clearPlayerEcm(onlinePlayer);
        }
        // 清理离线玩家背包内附魔
        /*
        for (OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers()) {
            if (offlinePlayer.getPlayer() != null) {
                clearPlayerEcm(offlinePlayer.getPlayer());
            }
        }
        */
    }

    public static void clearPlayerEcm(HumanEntity player) {
        PlayerInventory playerBackpack = player.getInventory();
        ItemStack[] itemStacks = playerBackpack.getContents();
        int i = 0;
        for (ItemStack item : itemStacks) {
            if (item != null) {
                if (EnchantmentItem.haveLimitEnchant(item)) {
                        /*
                        索引0到8指的是热栏。
                        9到35指的是主要库存，从库存左上角的9开始计数，向右移动，当它到达行尾时移动到它下面的左侧。它在清单中遵循相同的路径，就像你阅读一本书一样。
                        36到39是指装甲槽（从头到脚）。虽然您可以使用这些索引使用这种方法来设置装甲，但我们鼓励您使用提供的方法来设置这些槽。
                        指数40指的是副手(盾)物品槽。虽然您可以使用此索引开始使用此方法，但建议您使用此槽提供的方法。
                        如果您尝试在索引小于0或大于40的情况下使用此方法，将抛出ArrayIndexOutOfBounds异常。
                        */
                    if (i >= 0 && i < 36) {
                        playerBackpack.setItem(i, EnchantmentItem.respawnNewItem(item));
                    } else if (i >= 36 && i < 40) {
                        int j = i - 36;
                        switch (j) {
                            case 0:
                                playerBackpack.setBoots(EnchantmentItem.respawnNewItem(item));
                                break;
                            case 1:
                                playerBackpack.setLeggings(EnchantmentItem.respawnNewItem(item));
                                break;
                            case 2:
                                playerBackpack.setChestplate(EnchantmentItem.respawnNewItem(item));
                                break;
                            case 3:
                                playerBackpack.setHelmet(EnchantmentItem.respawnNewItem(item));
                                break;
                            default:
                                break;
                        }
                    } else if (i == 40) {
                        playerBackpack.setItemInOffHand(EnchantmentItem.respawnNewItem(item));
                    } else {
                        break;
                    }
                }
            }
            i++;
        }
    }
}
